package com.example.ymm.modules1.service.user;

import com.example.ymm.base.BaseService;
import com.example.ymm.model.TableList;
import com.example.ymm.model.YmPageDto;
import com.example.ymm.modules1.entity.my.user.DbCard;
import com.example.ymm.modules1.entity.my.user.DbIntegralLog;
import com.example.ymm.modules1.service.dto.*;

import java.util.List;

public interface DbIntegralLogService extends BaseService<DbIntegralLog> {


    TableList<DbIntegralLog> list(DbIntegralLogQueryCriteria criteria, YmPageDto ymPage);

    List<DbIntegralLog> queryAll(DbIntegralLogQueryCriteria criteria);


    /**
     * 打卡
     * 查看今日读书累计积分
     * readType =2
     * @return
     */
    AddNoteResultDto queryReadTypeByToday(DbUserNoteDto dto ,Integer integral);


    /**
     * 补卡
     * 查看今日读书累计积分
     * readType =2
     * @return
     */
    AddNoteResultDto patchReadTypeByToday(DbUserNoteDto dto ,Integer integral,String date);


    /**
     * 提前读书
     * 查看今日读书累计积分
     * readType =2
     * @return
     */
    AddNoteResultDto advanceReadTypeByToday(DbUserNoteDto dto ,Integer integral,String date);


    /**
     * 查看累计打卡的 累计积分
     * readType=3
     * @return
     */
    AddNoteResultDto queryCardByToday(List<DbUserNoteDto> list );


    /**
     * 查看累计打卡的 累计积分
     * 计算连续打卡天数
     * readType=3
     * @return
     */
    AddNoteResultDto queryAdvanceCardByDate(List<DbUserNoteDto> list,String date);

    /**
     *
     * 查看满勤或全勤的打卡积分 - 日常打卡
     * readType=1
     * @return
     */
    AddNoteResultDto queryFullByToday(DbCard card);


    /**
     * 查看满勤或全勤的打卡积分 - 补卡
     * readType=1
     * @return
     */
    AddNoteResultDto queryFullByDate(DbCard card,String date);

    /**
     * 读书获得累计时长-转化为积分
     * @param
     */
    AddNoteResultDto addReadTypeByToday(List<DbUserNoteDto> list);


    /**
     * 补卡 查询累计时长
     * @param list
     * @param date
     * @return
     */
    AddNoteResultDto patchReadTypeByToday(List<DbUserNoteDto> list,String date);


    /**
     * 提前读书 查询累计时长
     * @param list
     * @param date
     * @return
     */
    AddNoteResultDto advanceReadTypeByToday(List<DbUserNoteDto> list,String date);

    /**
     * 电脑 读书积分排行榜
     * @param criteria
     * @return
     */
    TableList<SysRankingListDto> sysRankingList(SysRankingQueryCriteria criteria, YmPageDto pageDto);


    /**
     * 查询用户的读书积分
     * @param criteria
     * @return
     */
    SysRankingListDto getUserReadIntegral(SysRankingQueryCriteria criteria);

    /**
     * 电脑排行榜
     * @param criteria
     * @return
     */
    TableList<SysRankingListDto> rankingIntegralList(SysRankingQueryCriteria criteria, YmPageDto pageDto);



    Integer countUserIntegral(DbIntegralLogQueryCriteria criteria);


    /**
     * 打卡次数计算有误进行积分补偿
     * 一次性9-10
     */
    void continuousNumCompensation();


    /**
     * 后台扣除用户积分
     * note 理由:[录音异常]扣除积分
     * userId
     * integral
     * @param dbIntegralLog
     */
    void sysUserDeduct(DbIntegralLog dbIntegralLog);


    /**
     * 后台增加用户读书积分
     */
    void sysUserAddReadIntegral(DbIntegralLog dbIntegralLog);

    /**
     * 后台积分统计 ： 读书积分 和 总积分
     * @param criteria
     * @param
     * @return
     */
    Integer sumIntegralTotal(SysRankingQueryCriteria criteria);


    /**
     * 用户剩余积分
     * @param criteria
     * @return
     */
    Double allTotalResidue(SysRankingQueryCriteria criteria);

}
